import Vue from "vue";
import Vuex from "vuex";
Vue.use(Vuex);

import actions from "./actions";
import Request from "@/utils/request";
import LS from "@/utils/localStorage";
import Config from "@/config";

export default new Vuex.Store({
    state: {
        // 存放一些基本的App信息，用于请求头（common）
        staticInfo: {
            appCode: Config.appCode,
            appVersion: Config.appVersion,
            channelId: Config.channelId
        },
        // 存放登录后的用户信息（common）
        userInfo: {
            mobilePhone: "",
            userType: "", // 1:商户，2:店员；3:服务商，4:业务员。
            userToken: "", // userToken
            userId: ""
        },
        // 设备信息（common）
        deviceInfo: null,
        // 首页数据源（common）
        homeData: {
            bannerData: [],
            custInfo: {
                // 商户信息
                // userType: "1", // 当前登录用户类型 1商户/2店员
                // merchantStatus: "02", // 商户状态
                // canPayFlag: false, // 商户是否可以进行支付
                // merchantCode: "M1256666544151", // 商户唯一标识码 如果为空,则说明该商户未提交过任何资料,或者是店员身份
                // expandCode: "C0004272", // 拓展机构号
                // merId: "22222", // 银联商户号
                // uatInsCode: "401510061614", // 条码支付机构号
            },
            serverInfo: {
                // 服务商所需基本信息
                // "code": "AGN78893919108097",
                // "userType": "3",
                // "certifyStatus": "03",
                // "canModifyFlag": false,
                // "profitDay": 10000,
                // "profitMonth": 50000.34,
                // "tradeCountDay": 100,
                // "tradeCountMonth": 15000,
                // "tradeAmountDay": 500000.33,
                // "tradeAmountMonth": 6000000.34,
                // "merCountDay": 20,
                // "merCountTotal": 56702,
                // "menuPermission": []
            }
        },
        // TODO 
        // app基本的数据配置 (带缓存，一天刷新一次)
        baseData: {
            storeDic: {}
        },
        // 银联SDK
        sdkInfo: {
            // 0 商户已开通且已绑定主设备->可以交易
            // 1 商户已开通但未绑定本设备->应先主设备绑定
            // 2 该账号下没有商户->应先开通商户
            // 3 商户正在审核中->请耐心等待
            // 4 该用户为子设备（店员）且已绑定子设备->可以交易
            // 5 该用户为子设备（店员）但未绑定子设备->先绑定子设备
            // 6 不可知
            regStatus: -1 // 设备状态标志
        }
    },

    mutations: {
        // 设置用户信息
        setUserInfo(state: any, userInfo: any) {
            state.userInfo = { ...state.userInfo, ...userInfo };
            LS.set("USERINFO", state.userInfo);
            // 如果改动的地方涉及 userToken，则刷新header头
            if (userInfo.userToken) {
                Request.setHeader({
                    ...state.staticInfo,
                    userToken: state.userInfo.userToken
                });
            }
        },

        // 清除用户信息
        clearUserInfo(state: any) {
            state.userInfo = {};
            LS.set("USERINFO", {});
            Request.setHeader(state.staticInfo);
            // 清除状态信息
            state.homeData.custInfo = {};
            state.homeData.serverInfo = {};
            LS.set("HOMEDATA", state.homeData);
        },

        // 设置首页数据
        setHomeData(state: any, data: any) {
            state.homeData = { ...state.homeData, ...data };
            LS.set("HOMEDATA", state.homeData);
        },

        // 设置基本数据源相关
        setBaseData(state: any, data: any) {
            state.baseData = { ...state.baseData, ...data };
            LS.set("BASEDATA", state.baseData);
        },

        // 设置SDK相关
        setSDKInfo(state: any, data: any) {
            state.sdkInfo = { ...state.sdkInfo, ...data };
        }
    },

    actions: actions,

    getters: {
        // ...
        userInfo: (state, getters) => {
            return state.userInfo;
        }
    }
});
